import moment from 'moment'
import { phoneReg } from './validate'

/**
 * 格式化时间
 * @param {Number|String|Date} date 时间
 * @param {String} format 日期格式。默认'YYYY-MM-DD'
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (date == null || date === '') {
    return ''
  }
  const temp = moment(date)
  if (temp.isValid()) {
    return temp.format(format)
  }
  return date
}

/**
 * 格式化手机号
 * @param {String} phone 手机号
 * @param {String} separator 分割字符
 */
export function formatPhone(phone, hide, separator = '-') {
  if (phone == null) return ''
  let tel = hide ? '***********' : trim(phone)
  if (!phoneReg.test(tel)) return tel
  tel = tel.substring(0, 3) + separator + tel.substring(3, 7) + separator + tel.substring(7, 11)
  return tel
}

/**
 * 格式化数字
 * @param {Number|String} num 数字
 * @param {Number} precision 保留的小数位数
 * @param {String} separator 分割字符
 */
export function formatNumber(num, precision, separator = ',') {
  // 判断是否为数字
  if (!isNaN(parseFloat(num)) && isFinite(num)) {
    // 把类似 .5, 5. 之类的数据转化成0.5, 5
    num = Number(num)
    // 处理小数点位数
    num = (precision == null ? num.toFixed(precision) : num).toString()
    // 分离数字的小数部分和整数部分
    const parts = num.split('.')
    // 整数部分加[separator]分隔, 借用一个著名的正则表达式
    parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + separator)

    return parts.join('.')
  }
  return ''
}

/**
 * 人民币 数字转换为大写金额
 * @param {Float} money 人民币金额
 */
export function convertMoney(money) {
  if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(money)) {
    return '数据非法'
  }
  money = parseFloat(money)
  if (money === 0) {
    return '零元'
  }
  var unit = '千百拾亿千百拾万千百拾元角分'
  var str = ''
  money += '00'
  var p = money.indexOf('.')
  if (p >= 0) {
    money = money.substring(0, p) + money.substr(p + 1, 2)
  }
  unit = unit.substr(unit.length - money.length)
  for (var i = 0; i < money.length; i++) {
    str += '零壹贰叁肆伍陆柒捌玖'.charAt(money.charAt(i)) + unit.charAt(i)
  }
  return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整')
}

/**
 * 去掉字符串中的空格
 * @param {String} str 字符串
 * @param {String} global 全局
 */
export function trim(str, global = 'g') {
  let result
  result = str.replace(/(^\s+)|(\s+$)/g, '')
  if (global && global.toLowerCase() === 'g') {
    result = result.replace(/\s/g, '')
  }
  return result
}

/**
 * 拟人化距离
 * @param {Number} distance 长度 单位米
 */
export function personifiedDistance(distance) {
  if (distance < 1000) {
    return distance + '米'
  } else {
    return (Math.round(distance / 100) / 10).toFixed(1) + '公里'
  }
}

export function personifiedDate(seconds) {
  if (seconds < 60) {
    return seconds + '秒'
  } else if (seconds < 60 * 60) {
    return Math.round(seconds / 60).toFixed(1) + '分钟'
  } else if (seconds < 60 * 60 * 60) {
    return Math.round(seconds / 60 / 60).toFixed(1) + '小时'
  } else {
    return Math.round(seconds / 24 / 60 / 60).toFixed(1) + '天'
  }
}